class Subject;

class Observer : public std::enable_shared_from_this<Observer> {
public:
    virtual void notify() = 0;
    virtual ~Observer() = default;
};

class Subject {
private:
    std::vector<std::weak_ptr<Observer>> observers;  // 存储弱引用
    
public:
    void addObserver(std::shared_ptr<Observer> observer) {
        observers.push_back(observer);  // 自动转换为 weak_ptr
    }
    
    void notifyObservers() {
        // 清理已销毁的观察者并通知存活的观察者
        auto it = observers.begin();
        while (it != observers.end()) {
            auto observer = it->lock();  // 尝试获取强引用
            if (observer) {
                observer->notify();  // 通知存活的观察者
                ++it;
            } else {
                it = observers.erase(it);  // 移除已销毁的观察者
            }
        }
    }
};